using SheLife.Domain.Entities;

namespace SheLife.Domain.Interfaces.Repositories
{
    /// <summary>
    /// 用户仓储接口
    /// </summary>
    public interface IUserRepository : IRepository<User>
    {
        Task<User?> GetByUsernameAsync(string username);
        Task<User?> GetByEmailAsync(string email);
        Task<User?> GetByPhoneNumberAsync(string phoneNumber);
        Task<IEnumerable<User>> GetByLifeStageAsync(string lifeStage);
        Task<IEnumerable<User>> GetByCreatedDateRangeAsync(DateTime startDate, DateTime endDate);
        Task<IEnumerable<User>> GetByLastLoginDateRangeAsync(DateTime startDate, DateTime endDate);
        Task<IEnumerable<User>> GetActiveUsersAsync();
        Task<IEnumerable<User>> GetInactiveUsersAsync();
        Task<int> GetTotalCountAsync();
        Task<int> GetActiveCountAsync();
        Task<IEnumerable<User>> GetByDateRangeAsync(DateTime startDate, DateTime endDate);
        Task<IEnumerable<User>> GetActiveByDateRangeAsync(DateTime startDate, DateTime endDate);
    }
}